Skip to content

Conversation

@Dev-LeChacal
Copy link
Contributor

@Dev-LeChacal Dev-LeChacal commented Jan 9, 2026

Contribution

Règles de contribution

Caution

Afin de garantir une application stable et pérenne dans le temps, nous t'invitons à vérifier que tu as bien respecté les règles de contribution. Sans cela, ta Pull Request ne pourra pas être examinée.

  • Cette Pull Request porte sur une seule fonctionnalité ou un seul correctif.
  • Cette Pull Request n'est pas faite essentiellement avec de l'IA.
  • Pour tout changement majeur, j’ai créé une issue afin d’échanger avec les mainteneurs de Papillon sur la meilleure façon de l’intégrer.
  • Ma Pull Request respecte les conventions Conventional Commits et Conventional Branch ainsi que les conventions de codage de l'application.
  • J’ai testé mes modifications sur iOS et Android, et l’application fonctionne correctement.
  • J’emploie un langage informel, clair et concis dans mes messages.
  • J’ai documenté mes changements de manière appropriée, soit dans la description de la Pull Request, soit dans le GitBook.
  • J’ai ajouté les traductions nécessaires dans au moins un fichier de langue.

Résumé des changements

Optimisation des performances dans la page du calendar.

Summary by CodeRabbit

  • Refactor
    • Amélioration des performances du calendrier via meilleure mémorisation des données et réduction des recalculs.
    • Ajustements du comportement de défilement et des paramètres de rendu pour une navigation plus fluide.
    • Nettoyage et harmonisation du code interne sans modification de l'API publique ni du comportement fonctionnel.

✏️ Tip: You can customize this high-level summary in your review settings.

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Jan 9, 2026

Walkthrough

Optimisations internes du calendrier : callbacks refactorisés en useCallback, introduction de useMemo pour un mapping des emplois du temps, et ajustements des paramètres de FlatList. Modifications principalement de formatage et de performance sans changement d'API publique. (48 mots)

Changes

Cohort / File(s) Résumé des modifications
Hooks calendrier
app/(tabs)/calendar/hooks/useCalendarState.ts
Encapsulation de handleDateChange, onMomentumScrollEnd et onScroll avec useCallback (mise en forme multi‑ligne) ; mise à jour de la logique de comparaison de semaine via update fonctionnel ; ajustements de style d'import/ponctuation.
Composant calendrier et FlatList
app/(tabs)/calendar/index.tsx
Ajout de useMemo pour timetableMap (clefs : timestamps normalisés) ; suppression de currentIndex interne ; renderDay utilise timetableMap ; création d’un extraData memoisé regroupant manualRefreshing, headerHeight, colors, timetable.length ; modifications des props FlatList : decelerationRate, disableIntervalMomentum, snapToAlignment, windowSize, maxToRenderPerBatch, initialNumToRender, updateCellsBatchingPeriod.

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~12 minutes

Suggested reviewers

  • ryzenixx
  • tryon-dev
🚥 Pre-merge checks | ✅ 2 | ❌ 1
❌ Failed checks (1 warning)
Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (2 passed)
Check name Status Explanation
Title check ✅ Passed Le titre décrit avec précision l'objectif principal du changement : des améliorations de performance sur la page calendrier, ce qui correspond directement aux modifications apportées.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@Dev-LeChacal Dev-LeChacal changed the title Performance Improvements feat: Performance Improvements Jan 9, 2026
Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
app/(tabs)/calendar/index.tsx (1)

52-73: renderDay : dépendances incomplètes (stale props) → ajoutez insets et tabBarHeight.
Le callback utilise insets (Line 68) et tabBarHeight (Line 69) mais ils ne sont pas dans le tableau de dépendances, donc la UI peut ne pas se mettre à jour correctement.

Proposition de diff
-  }, [getDateFromIndex, timetableMap, manualRefreshing, handleRefresh, colors, headerHeight]);
+  }, [getDateFromIndex, timetableMap, manualRefreshing, handleRefresh, colors, headerHeight, insets, tabBarHeight]);
🧹 Nitpick comments (4)
app/(tabs)/calendar/hooks/useCalendarState.ts (2)

37-46: handleDateChange : vous pouvez le rendre vraiment “stable” (perf) via une mise à jour fonctionnelle.
Aujourd’hui la dépendance [weekNumber] fait recréer le callback à chaque changement de semaine. Une MAJ fonctionnelle évite ça et réduit les re-renders en cascade.

Proposition de diff
-  const handleDateChange = useCallback(
-    (newDate: Date) => {
-      setDate(newDate);
-      const newWeekNumber = getWeekNumberFromDate(newDate);
-      if (newWeekNumber !== weekNumber) {
-        setWeekNumber(newWeekNumber);
-      }
-    },
-    [weekNumber]
-  );
+  const handleDateChange = useCallback((newDate: Date) => {
+    setDate(newDate);
+    const newWeekNumber = getWeekNumberFromDate(newDate);
+    setWeekNumber(prev => (prev !== newWeekNumber ? newWeekNumber : prev));
+  }, []);

76-88: onMomentumScrollEnd : OK, mais attention aux recréations fréquentes (dépend de currentIndex).
Si l’objectif est de stabiliser les handlers pour la perf, un pattern “ref + setState fonctionnel” peut éviter d’avoir currentIndex en dépendance.

app/(tabs)/calendar/index.tsx (2)

39-51: timetableMap : bonne idée, mais typez la Map pour éviter le Map<any, any> implicite.
En TS, ça aide aussi à sécuriser day.courses et les .get(...).

Proposition de diff (typing)
-  const timetableMap = useMemo(() => {
-    const map = new Map();
+  const timetableMap = useMemo(() => {
+    const map = new Map<number, (typeof timetable)[number]["courses"]>();

74-80: extraData : OK, mais timetable.length ne couvre pas les changements de contenu à longueur constante.
Si timetable peut muter “à longueur égale” (ex: cours modifiés), vous risquez de ne pas rafraîchir certaines cellules selon les optimisations FlatList. À minima, vérifiez que timetable est toujours remplacé immuablement par le hook (nouvelle référence) quand le contenu change.

📜 Review details

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 41ba703 and f4ad42f.

📒 Files selected for processing (2)
  • app/(tabs)/calendar/hooks/useCalendarState.ts
  • app/(tabs)/calendar/index.tsx
🔇 Additional comments (5)
app/(tabs)/calendar/hooks/useCalendarState.ts (3)

1-2: Changement cosmétique des imports : OK.


31-35: Calcul de diff : RAS.


66-67: Catch/log : OK.

app/(tabs)/calendar/index.tsx (2)

1-1: Import useMemo : OK.


104-116: Réglages FlatList perf : à valider sur Android/iOS (trade-offs UX possibles).

  • decelerationRate="fast" + snapToInterval + pagingEnabled={false} peut changer sensiblement le “feel” selon plateformes.
  • windowSize=5, maxToRenderPerBatch=2, initialNumToRender=1 peuvent provoquer du blanc lors de scroll rapide si CalendarDay est lourd.

Also applies to: 119-120

@Dev-LeChacal
Copy link
Contributor Author

@coderabbitai review

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Jan 9, 2026

✅ Actions performed

Review triggered.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@Dev-LeChacal Dev-LeChacal changed the title feat: Performance Improvements feat: Performance Improvements in Calendar Page Jan 10, 2026
@coderabbitai
Copy link
Contributor

coderabbitai bot commented Jan 10, 2026

✅ Actions performed

Review triggered.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant